
//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or
// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.

import java.util.Scanner;

/**
 * 一款2D游戏，你作为玩家可以释放一个技能，从而摧毁所选中的释放位置AABB[W,H]范围内的所有小怪。
 * 现在地图上有N(N ≤ 10000)个怪物，用整数Xi,Yi(其值在[0,4000])表示怪物在地图上的位置，以及该怪物被摧毁可获得对应的分数Vi。
 * 将作用范围为[W,H]的技能作用在不同位置，可以获得不同的分数值，请设计程序计算最大的分数值Vm。
 *
 * 输入描述
 *
 * 第一行3个正整数为怪物数目N和AABB的长度W、宽度H
 *
 * 接下来N行每行3个正整数，分别为Xi、Yi、Vi
 *
 * 输出描述
 *
 * 释放该技能摧毁掉地图上怪物可获得的最大分数
 */
//二维前缀和
public class MaxScore {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        final int LIM = 4001;
        while(scanner.hasNextInt()) {
            int[][] pres = new int[LIM][LIM];
            int N = scanner.nextInt();
            int W = scanner.nextInt();
            int H = scanner.nextInt();
            for(int i=0;i<N;i++) {
                int x = scanner.nextInt();
                int y = scanner.nextInt();
                int v = scanner.nextInt();
                pres[x][y] += v;
            }
            for(int i=1;i<LIM;i++) {
                for(int j=1;j<LIM;j++) {
                    pres[i][j] += pres[i-1][j] + pres[i][j-1] - pres[i-1][j-1];

                }
            }

            int maxScore = 0;
            for(int i=W;i<LIM;i++) {
                for(int j=H;j<LIM;j++) {
                    int currScore = pres[i][j] - pres[i-W][j] - pres[i][j-H] + pres[i-W][j-H];
                    maxScore = Math.max(maxScore, currScore);
                }
            }
            System.out.println(maxScore);
        }
    }
}